//#include <iostream>
//#include <vector>
//#include <queue>
//using namespace std;
//
//const int N = 1e5 + 10;
//
//queue<int> q;
//vector<int> edges[N];
//bool st[N];
//
//void bfs(){
//	q.push(1);
//	st[1] = true;
//	while(q.size()){
//		int u = q.front();
//		q.pop();
//		cout << u << " ";
//		
//		for(auto v : edges[u]){
//			if(!st[v]){
//				q.push(v);
//				st[v] = true;
//			}
//		}
//	}
//}
//
//int main(){
//	int n;
//	cin >> n;
//	for(int i = 1;i < n;i++){
//		int a,b;
//		cin >> a >> b;
//		edges[a].push_back(b);
//		edges[b].push_back(a);
//	}
//	bfs(); 
//	return 0;
//}

#include <iostream>
#include <queue>
using namespace std;

const int N = 1e5 + 10;
int e[N*2],ne[N*2],h[N];
int id;
queue<int> q;
bool st[N];

void add(int a,int b){
	id++;
	e[id] = b;
	ne[id] = h[a];
	h[a] = id;
}

void bfs(){
	q.push(1);
	st[1] = true;
	while(q.size()){
		int u = q.front();
		q.pop();
		cout << u << " ";
		for(int i = h[u];i;i = ne[i]){
			int v = e[i];
			if(!st[v]){
				q.push(v);
				st[v] = true;
			}
		}
	}
}

int main(){
	int n;
	cin >> n;
	for(int i = 1;i < n;i++){
		int a,b;
		cin >> a >> b;
		add(a,b);
		add(b,a);
	}
	bfs();
	return 0;
}
